package com.ssy.jt808.protocol.commons.transform.attribute;

import io.github.yezhihao.protostar.annotation.Field;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 激烈驾驶 0x70
 *
 * @author wangzezhou
 */
@Data
public class AlarmAD extends Alarm{

  public static final int key = 0x70;

  @Field(length=4, desc="报警ID")
  private long id;
  @Field(length=1, desc="标志状态：0.不可用 1.开始标志 2.结束标志")
  private int  state;
  @Field(length=1, desc="0x01：急加速报警"
                        + "0x02：急减速报警"
                        + "0x03：急转弯报警"
                        + "0x04：怠速报警"
                        + "0x05：异常熄火报警"
                        + "0x06：空挡滑行报警"
                        + "0x07：发动机超转报警"
                        + "0x12~0xFF：用户自定义")
  private int  type;
  @Field(length=2, desc="报警时间阈值（单位秒）。")
  private int  thresholdTime;
  @Field(length=2, desc="报警阈值 1。"
                        + "当报警类型为 0x01~0x03 时，该位为报警重力加速度阈"
                        + "值，单位为 1/100g；"
                        + "当报警类型为 0x04~0x07 时，该位为报警车速阈值，单位"
                        + "为 km/h。")
  private int  threshold1;
  @Field(length=2, desc="报警阈值 2。"
                        + "当报警类型为 0x01~0x03 时，该位预留；"
                        + "当报警类型为 0x04~0x07 时，该位为报警发动机转速阈"
                        + "值，单位为 RPM。")
  private int  threshold2;

  @Field(length=1, desc="车速")
  private int           speed;
  @Field(length=2, desc="高程")
  private int           altitude;
  @Field(length=4, desc="纬度")
  private int           latitude;
  @Field(length=4, desc="经度")
  private int           longitude;
  @Field(length=6, charset="BCD", desc="日期时间")
  private LocalDateTime alarmTime;
  @Field(length=2, desc="车辆状态")
  private int           statusBit;

  @Field(length=7, desc="终端ID", version={ -1, 0 })
  @Field(length=30, desc="终端ID(粤标)", version=1)
  private String        deviceId;
  @Field(length=6, charset="BCD", desc="时间(YYMMDDHHMMSS)")
  private LocalDateTime dateTime;
  @Field(length=1, desc="序号(同一时间点报警的序号，从0循环累加)")
  private int           sequenceNo;
  @Field(length=1, desc="附件数量")
  private int           attachmentNum;
  @Field(length=1, desc="预留", version={ -1, 0 })
  @Field(length=2, desc="预留(粤标)", version=1)
  private int           reserved;

  @Override
  public int getSource(){
    return 1;
  }

  @Override
  public int getCategory(){
    return key;
  }

  @Override
  public int getAlarmType(){
    return buildType(key, type);
  }
}